package com.demo;

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;
import java.io.IOException;

/**
 * @author wangzhanjin
 * @date 2018/6/13 10:50
 */
public class TopicConsumer {

    public static void main(String[] args) throws JMSException, IOException {
        //1.创建连接工厂，不是管理端口8161，ActiveMQConnectionFactory实际是ConnectionFactory实现类
        //ConnectionFactory是java的接口
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        //2.创建连接
        Connection connection = connectionFactory.createConnection();
        //3.启动连接
        connection.start();
        //4.获取session（会话对象）,参数1：是否启动事务；参数2，消息的确认方式
        //参数1：true，必须commit才能发送，false就是自动提交了
        //消息确认方式：AUTO_ACKNOWLEDGE=1自动提交；CLIENT_=2客户端手动确认；
        //              DUPS_OK=3自动批量；SESSION_TRANSACTED=0事务提交并确认
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        //5.创建队列对象
        Topic topic = session.createTopic("test-topic");
        // Destination，被继承Queue和Topic，其中实现类为ActiveMQQueue和ActiveMQTopic
        //6.创建消息消费者——————————————————————————————————————
        MessageConsumer consumer = session.createConsumer(topic);
        //7.设置监听，匿名类
        consumer.setMessageListener(new MessageListener() {
            @Override
            public void onMessage(Message message) {
                TextMessage textMessage = (TextMessage) message;
                try {
                    System.out.println("1提取的消息是："+textMessage.getText());
                } catch (JMSException e) {
                    e.printStackTrace();
                }
            }
        });
        //8.等待键盘输入,否则拉了，就全部执行完，看不到结果了
        System.in.read();

        //9.关闭资源
        consumer.close();
        session.close();
        connection.close();
    }
}
